package com.springapi.utils;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.springapi.entity.KuaiDi100;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;

public class HttpServiceHutool {
    /*
     *params 参数数组，headers 请求头数组
     */
    public static Map<String, Object> sendPostRequest(String url, Map<String, Object> params, Map<String, String> headers) {
        // 创建HttpRequest对象并设置请求方法为POST
        HttpRequest request = HttpRequest.post(url);

        // 设置请求headers
        if (headers != null) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                request.header(entry.getKey(), entry.getValue());
            }
        }

        // 设置请求参数（表单数据或JSON数据，根据API要求选择）
        // 如果是表单数据，使用 form 方法
        // 如果是JSON数据，使用 body 方法并传入JSON字符串或Map对象（Hutool会自动转换为JSON字符串）
        // 这里假设API接受表单数据
        if (params != null) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                request.form(entry.getKey(), entry.getValue().toString());
            }
        }


        // 如果API接受JSON数据，则应该这样做：
         //request.body(JSONUtil.toJsonStr(params));

        // 发送请求并获取响应
        HttpResponse response = request.execute();

        // 解析响应体为Map<String, Object>
        // 注意：这里假设响应体是JSON格式，且可以被成功解析为Map
        String responseBody = response.body();
        System.out.println("http返回："+responseBody);
        System.out.println("接口返回状态"+response.getStatus());
        if (response.getStatus() == 200) {

            return JSONUtil.toBean(responseBody, Map.class);
        } else {
            // 处理空响应或解析错误的情况
            // 可以返回一个空Map，或者抛出一个异常
            return new HashMap<>();
        }
    }



    /*
     *params 参数数组，headers 请求头数组
     */
    public static Map<String, Object> sendPostRequestjson(String url, Map<String, Object> params, Map<String, String> headers) {
        // 创建HttpRequest对象并设置请求方法为POST
        HttpRequest request = HttpRequest.post(url);

        // 设置请求headers
        if (headers != null) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                request.header(entry.getKey(), entry.getValue());
            }
        }

        // 设置请求参数（表单数据或JSON数据，根据API要求选择）
        // 如果是表单数据，使用 form 方法
        // 如果是JSON数据，使用 body 方法并传入JSON字符串或Map对象（Hutool会自动转换为JSON字符串）
        // 这里假设API接受表单数据
        /*if (params != null) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                request.form(entry.getKey(), entry.getValue().toString());
            }
        }
        */

        // 如果API接受JSON数据，则应该这样做：
        request.body(JSONUtil.toJsonStr(params));

        // 发送请求并获取响应
        HttpResponse response = request.execute();

        // 解析响应体为Map<String, Object>
        // 注意：这里假设响应体是JSON格式，且可以被成功解析为Map
        String responseBody = response.body();
        System.out.println("http返回："+responseBody);
        System.out.println("接口返回状态"+response.getStatus());
        if (response.getStatus() == 200) {

            return JSONUtil.toBean(responseBody, Map.class);
        } else {
            // 处理空响应或解析错误的情况
            // 可以返回一个空Map，或者抛出一个异常
            return new HashMap<>();
        }
    }
}
